#!/bin/bash
set -e  # 遇到错误立即退出

# 翁法罗斯平台一键部署脚本
echo "====================================="
echo "        翁法罗斯传奇部署脚本         "
echo "====================================="

# 配置
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
DOCKER_DIR="$PROJECT_ROOT/容器化部署"
LOG_DIR="$PROJECT_ROOT/数据管理/game_logs/deploy"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
LOG_FILE="$LOG_DIR/deploy_$TIMESTAMP.log"

# 初始化
init() {
    echo "初始化部署环境..."
    mkdir -p "$LOG_DIR"
    
    # 检查是否在项目根目录
    if [ ! -f "$DOCKER_DIR/docker-compose.yml" ]; then
        echo "错误：未找到docker-compose.yml，请确认脚本路径正确"
        exit 1
    fi
    
    # 检查Docker是否可用
    if ! command -v docker &> /dev/null; then
        echo "错误：未安装Docker，请先安装Docker"
        exit 1
    fi
    
    # 检查docker-compose是否可用
    if ! command -v docker-compose &> /dev/null; then
        echo "错误：未安装docker-compose，请先安装"
        exit 1
    fi
    
    echo "环境检查通过"
}

# 拉取最新代码
pull_latest_code() {
    echo "拉取最新代码..."
    if [ -d "$PROJECT_ROOT/.git" ]; then
        git pull origin main || {
            echo "警告：代码拉取失败，将使用本地代码继续部署"
        }
    else
        echo "非Git仓库，跳过代码拉取"
    fi
}

# 构建并启动容器
start_services() {
    echo "开始构建并启动服务..."
    cd "$DOCKER_DIR"
    
    # 构建并启动所有服务
    docker-compose up --build -d
    
    # 检查服务状态
    echo "检查服务状态..."
    docker-compose ps
    
    # 检查是否有服务启动失败
    failed_services=$(docker-compose ps -q | xargs docker inspect -f '{{.State.Status}} {{.Name}}' | grep -v 'running' | awk '{print $2}')
    if [ -n "$failed_services" ]; then
        echo "警告：以下服务启动失败："
        echo "$failed_services"
        echo "查看日志：docker-compose logs -f"
    fi
}

# 数据库迁移（如果需要）
migrate_database() {
    echo "执行数据库迁移..."
    # 这里添加实际的数据库迁移命令
    # 例如：docker-compose exec backend python manage.py migrate
}

# 部署后检查
post_deploy_check() {
    echo "执行部署后检查..."
    
    # 检查训练服务
    if curl -s "http://localhost:8000/health" | grep -q "healthy"; then
        echo "训练服务健康检查通过"
    else
        echo "警告：训练服务健康检查失败"
    fi
    
    # 检查游戏引擎服务
    if curl -s "http://localhost:8001/health" | grep -q "healthy"; then
        echo "游戏引擎服务健康检查通过"
    else
        echo "警告：游戏引擎服务健康检查失败"
    fi
    
    # 检查可视化服务
    if curl -s "http://localhost:3000" | grep -q "翁法罗斯"; then
        echo "可视化服务检查通过"
    else
        echo "警告：可视化服务检查失败"
    fi
}

# 主流程
main() {
    init
    pull_latest_code
    start_services
    migrate_database
    post_deploy_check
    
    echo "====================================="
    echo "部署完成！"
    echo "服务访问地址："
    echo "- 训练环境API: http://localhost:8000"
    echo "- 游戏引擎API: http://localhost:8001"
    echo "- 代码生成器API: http://localhost:8002"
    echo "- 可视化界面: http://localhost:3000"
    echo "- SSH连接（训练容器）: ssh root@localhost -p 2222 （密码: onpharos）"
    echo "部署日志已保存至: $LOG_FILE"
    echo "====================================="
}

# 执行主流程并记录日志
main 2>&1 | tee "$LOG_FILE"